GoでEC2上にWebサーバを構築して簡単なページを表示してみた
こんにちは、ゲームソリューショングループのsoraです。
今回は、GoでEC2上にWebサーバを構築して簡単なページを表示してみたことについて書いていきます。
本記事で紹介すること
- EC2へのGoのインストール
- GoでのWebサーバの実装
- 実行(HTMLページの表示)
EC2へのGoのインストール
EC2作成
まずはEC2を作るのですが、ほとんどデフォルト設定のため、設定を入れた部分のみ記載いたします。
ネットワークACLの設定は、デフォルトのものを使用していれば不要だと思いますが、必要に応じて入れてください。
- EC2のAMI:Amazon Linux 2(Amazon Linux 2023だとamazon-linux-extrasが入っておらず手順が少し変わります)
- セキュリティグループ:アクセス元のIPアドレスからのSSHと8080ポートへのアクセスを許可
Goのインストール
EC2にsshでログインして、Goをインストールしていきます。
#amazon-linux-extrasが入っていることの確認 $ which amazon-linux-extras #amazon-linux-extrasでインストール可能なGoのバージョンを確認 $ amazon-linux-extras list | grep golang #Goのインストール $ sudo amazon-linux-extras install golang1.11 #GOPATHを通す $ sudo vi ~/.bashrc ⇒export GOPATH=$HOME/goを追記 #設定されていることの確認 $ source ~/.bashrc $ echo $GOPATH #Goがインストールされていることの確認 $ go version
GoでのWebサーバの実装
Goにはhttpパッケージがあり、HTTPクライアントとサーバーが簡単に実装できます。
http package - net/http - Go Packages
package main import ( "fmt" "html/template" "log" "net/http" ) func frontHandler(w http.ResponseWriter, r *http.Request) { // HTMLファイルのパース処理 resp, err := template.ParseFiles("front.html") if err != nil { log.Printf("template error: %v", err) } // 値の埋め込み+エラー処理 if err := resp.Execute(w, nil); err != nil { log.Printf("failed to execute template: %v", err) } } func main() { http.HandleFunc("/front", frontHandler) fmt.Println("Go Server Start") // リクエスト状態の開始 log.Fatal(http.ListenAndServe(":8080", nil)) }
テストとして表示させるページのHTMLファイルも作成します。
<h1>sora</h1> <h2>所属</h2> <p>営業統括本部 ゲームソリューショングループ ソリューションアーキテクト</p> <h2>今後ブログにしようと思っていること</h2> <ul> <li>CDK(Python)で出たエラー</li> <li>Goで色々作ってみた成果物</li> <li>構築したことのない構成やサービスをCDKで構築</li> </ul>
実行(HTMLページの表示)
コードの準備ができたため、先ほどの2つのファイルをEC2上に配置して、Goプログラムを実行します。
$ go run http.go Server Start Up........
サーバにてリクエストを受け付ける状態にできたため、ブラウザで[パブリックIPアドレス]:8080/front
にアクセスします。
HTMLページが表示されました。
参考にしたページ
Go開発環境/ビルド環境としてAmazon Linuxをセットアップする手順
Go の html/template でヘッダーやフッター等の共通化を実現する方法
GoでWebサーバーを構築
最後に
今回は、GoでEC2上にWebサーバを構築して簡単なページを表示してみました。
どなたかの参考になると幸いです。